webpack - dll

项目中,要引入许多的第三方模块。这些第三方模块在打包的时候会被打包进最后生成的文件之中。

导致最后生成的文件过大的同时也增加了打包的时间。

如果这些第三方模块能只打包一次,之后就直接使用这些打包好的模块;

当使用第三方库的时候,直接从从我们预先打包出的文件中去寻找即可。

单独打包第三方模块

由于需要单独打包第三方模块,所以需要一个创建独立的Webpack配置文件webpack.dll.js

const webpack = require('webpack');
const {resolve} = require('path');

module.exports = {
  entry: {
    vendors: ['lodash']
  },
  output: {
    path: resolve(__dirname, 'dll'),
    filename: '[name].dll.js',
    library: '[name]',
  },
  plugins: [
    new webpack.DllPlugin({
      name: '[name]',
      path: resolve(__dirname, 'dll/manifest.json')
    })
  ],
  mode: 'production'
}

该文件主要作用

  • lodash则打包进vendors.dll.js里面;
  • plugins内使用了一个DLLPlugin,这个插件会在path字段所给出的路径生成一个manifest.json。这个json文件包含了importrequire请求到模块ID的映射。这个文件在正式打包项目代码的时候会用到。

先运行此文件试试:

package.json文件中添加scripts - "dev-dll": "webpack --config webpack.dll.js"

然后执npm run dev-dll

正式打包项目

在打包前,我们需要使用到webpack的DllReferencePlugin,这个plugin的作用主要是:

告诉webpack哪些库不参与打包。

另外,我们还需要在打包的时候,将之前打包好的库,一起打包出去,并且在html中自动引入,

npm install add-asset-html-webpack-plugin -D

然后配置webpack.config.js文件的plugins中

    // dll
    // 告诉webpack哪些库不参与打包
    new webpack.DllReferencePlugin({
      manifest: path.resolve(__dirname, 'dll/manifest.json')
    }),
    // 之前打包好的库,一起打包出去,并且在html中自动引入
    new AddAssetHtmlWebpackPlugin({
      filepath: path.resolve(__dirname, 'dll/vendors.dll.js')
    }),

构建项目

image-20210408173118423

后面,构建项目的时候就不需要在打包lodash的包了。

本章结束!

results matching ""

    No results matching ""